4.4.3. 乘法和除法

本节简要介绍二进制与整数的乘法和除法。特别是,它展示了手动计算结果的方法,并且不反映现代硬件的行为。该描述并不全面,因为本章的其余部分主要关注加法和减法。

乘法

要进行二进制数相乘,请使用常见的纸笔策略,一次考虑一位数字并将结果相加。例如,将 0b0101 (5) 与 0b0011 (3) 相乘相当于求和:

  • d0 乘以 0b101 (5) 的结果:0b0101 (5)
  • 将 d1 乘以 0b101 (5) 并将结果向左移动一位数的结果:0b1010 (10)。

  0101       0101       0101
x 0011  =  x    1  +  x   10  =  101 + 1010  =  1111 (15)

(整数) 除法

与刚刚描述的其他运算不同,除法有可能产生非整数结果。对整数进行除法时要记住的主要一点是,在大多数语言(例如 C、Python 2 和 Java)中,结果的小数部分会被截断。除此之外,二进制除法使用大多数学生在小学学习的相同长形式方法。例如,计算 11 / 3 会产生整数结果 3:

    ____
11 |1011

    00__   11 (3) doesn't fit into 1 (1) or 10 (2),
11 |1011   so the first two digits of the result are 00.

    001_   11 (3) fits into 101 (5) once.
11 |1011

    101    101 (5) - 11 (3) leaves 10 (2).
  -  11
     10

    0011
11 |1011   11 (3) fits into 101 (5) once again.
     101

此时,算术已产生预期的整数结果 0011 (3),并且硬件会截断所有小数部分。如果您有兴趣确定积分余数,请使用模运算符 (%);例如,11%3=2。